/**
  *****************************************************************************
  * @file 
  * @brief 
  * @author Evan
  * @version V1.0.0
  * @date 2023/10/14
  *****************************************************************************
  */
#ifndef __DEV_CDG025D_H__
#define __DEV_CDG025D_H__

/* Public include -----------------------------------------------------------*/
#include "dev_include.h"
#include "math.h"
/* Public defines -----------------------------------------------------------*/

/* CDG025D RECV STRING */
#define CDG_BYTE_SENDLEN        0 // 长度字节 
#define CDG_BYTE_PAGENO         1 // 页序号字节
#define CDG_BYTE_STA            2 // 状态字节 
#define CDG_BYTE_ERR            3 // 异常字节
#define CDG_BYTE_VALUEH         4 // 测量值高字节
#define CDG_BYTE_VALUEL         5 // 测量值低字节 
#define CDG_BYTE_READCMD        6 // 读命令字节 
#define CDG_BYTE_SENTYPE        7 // 传感器类型字节 
#define CDG_BYTE_CHECKSUM       8 // 校验和字节

/* Page No. byte */
#define PAG_CDG025D_10_24       2 // Parameter for CDG025D with output signal 10.24 V 
#define PAG_CDG045D_200D_10_24  3 // Parameter for CDG045D … CDG200D and CDG045D2 … CDG100D2 with output signal 10.24 V
#define PAG_CDG025D_10          4 // (default)Parameter for CDG025D with output signal 10.00 V (analog)

/* Status byte */
#define STA_CONTINUOUS_OUTPUT   (0 << 0) // 连续输出测量值
#define STA_INDIVIDUAL_OUTPUT   (1 << 0) // 单次测量值

#define STA_MANUAL_SETPOINT     (2 << 1) // 手动设置值 
#define STA_ZERO_ADJUST         (3 << 1) // 调整零点

#define STA_TOGGLE_bit_0        (0 << 3) // 切换位，改变与每个字符串的正确接收 
#define STA_TOGGLE_bit_1        (1 << 3) // 

#define STA_UNIT_MBAR           (0 << 4) // 压力单位为mbar
#define STA_UNIT_TORR           (1 << 4) // 压力单位为Torr
#define STA_UNIT_PA             (2 << 4) // 压力单位为Pa

#define STA_STANDARD_MODE       (0 << 6) // 标准测量方式

//for CDG045D, CDG045D2, CDG100D, CDG100D2, CDG160D, CDG200D only
#define STA_HEATING             (0 << 7) // Heating
#define STA_TEM_ATTAINEED       (1 << 7) // Sensor temperature attained

/* Error byte */
#define ERR_RS232_SYNC          0 // RS232 同步错误
#define ERR_INCORRECT_CMD       1 // 命令不正确，例如不可允许的地址（语法错误）
#define ERR_INADMISS_READ_CMD   2 // 不允许的读取命令
#define ERR_SP1_STA             3 // SP1状态
#define ERR_SP2_STA             4 // SP2状态
#define ERR_EXTEND_SET          7 // 扩展错误集

/* CDG025D SEND STRING */
#define READCMD                 0x00 //读命令
#define WRITECMD                0x10 //写命令
#define SPECIALCMD              0x40 //特殊命令,without command



typedef struct
{
    double  P_sensor;           //传感器压力值，单位Pa(1bar = 100000Pa)
	uint8_t status;             //通信状态（1：成功， 0：失败）
} rbm350val_t;

/* Public enum -----------------------------------------------------------*/
typedef enum
{
    RBMSET_MODE = 0,   //设置模式
    RBMSET_UNIT,       //设置单位
    RBMREAD_SW,        //读取版本号
    RBM_RST,           //模块重启
	
	RBM_EXT_ERR,
    
} rbm350cmd_e;//命令列表
/* Public Struct -----------------------------------------------------------*/
//typedef struct dev_cdg025d  dev_cdg025d_t;


//struct dev_cdg025d
//{
//    /* ***************Public Parameter  *************** */
//	const char *            Drv_Num;
//    const char *            Tx_Pin;
//    const char *            Rx_Pin;
//    uint32_t                BaudRate;//模块串口出厂波特率
//    drv_usart_wordlen_e     WordLength;
//    drv_usart_stopbit_e     StopBits;
//    drv_usart_parity_e      Parity;
//    uint16_t                Rx_Priority;
//    uint32_t                buff_max;

//	/* ***************Private Method    *************** */
//	
//    /* ***************Public Method     *************** */
//	float (*Read) (dev_cdg025d_t*  , uint8_t );
//	unsigned long (*ReadPre) (dev_cdg025d_t* );
//    /* ***************Private Attributes*************** */

//};
/* Public Variable ---------------------------------------------------------*/

//Pointer

//Array

//Const

/* Pubilc function prototypes -----------------------------------------------*/
void RBM350ReadVer(void);
int RBM350AssembleSendCom(uint8_t *p_dst);
int RBM350MastDecode(uint8_t *p_data, uint8_t len, uint16_t offset);
static void RBM350ComCallBack(uint8_t *data, uint32_t len);
uint32_t RBM350Com_send_data(uint8_t *data, uint32_t len);
void RBM350_handler(uint16_t timebase);
void RBM350_init(void);



#endif /* __DEV_CDG025D_H__ */
/******************* (C) COPYRIGHT 2023 Evan *****END OF FILE****/
